package com.autumn.platform.web.resulthandler.context;

import java.util.Map;

import org.springframework.web.method.HandlerMethod;

public interface HandlerMethodContext {

    /**
     * 处理器方法，处理器实例中的方法对象
     * 
     * @return
     */
    public HandlerMethod getHandlerMethod();

    /**
     * 处理器方法参数
     * 
     * @return
     */
    public Object[] getArgs();

    /**
     * 第index个处理器参数
     * 
     * @param index
     * @param cls
     * @return
     */
    public <T> T getArg(int index, Class<T> cls);

    /**
     * 处理器是否正常处理成功
     * 
     * @return
     */
    public boolean isSuccess();

    /**
     * 处理器返回结果，如果处理器执行过程中抛出异常，返回null
     * 
     * @param cls
     * @return
     */
    public <T> T getResult(Class<T> cls);

    /**
     * 抛出的异常，如果处理器正常处理，返回null
     * 
     * @return
     */
    public Throwable getThrowable();

    /**
     * 处理器开始处理时间
     * 
     * @return
     */
    public long getStartTime();

    /**
     * 处理器完成处理时间
     * 
     * @return
     */
    public long getEndTime();

    /**
     * 转换为Map描述
     * 
     * @return
     */
    public Map<String, Object> asMap();
}
